Le strutture per i menù Le strutture utilizzate per definire un menù sono due: Menu e MenuItem; la prima serve per definire i titoli dei menù, la seconda serve per definire un'opzione del menù. struct Menu { struct Menu *NextMenu; WORD LeftEdge, TopEdge; WORD Width, Height; UWORD Flags; BYTE *MenuName; struct MenuItem *FirstItem; WORD JazzX, JazzY, BeatX, BeatY; }; NextMenu Puntatore al prossimo titolo del menù. LeftEdge, TopEdge, Width, Height Posizione e grandezza del box di selezione del titolo del menù. Flags - MENUENABLED se presente indica che questo menù è abilitato, altrimenti risulta disabilitato; in tal caso le opzioni e le sotto-opzioni del menù saranno mascherati e l'utente non potrà selezionarli. - MIDRAWN questo flag indica che il menù è correntemente visualizzato all'utente. MenuName Puntatore alla stringa che verrà visualizzata come titolo del menù. FirstItem Questo punta alla struttura MenuItem indicante la prima opzione di questo menù. JazzX, JazzY, BeatX, BeatY Valori utilizzati solo dal sistema struct MenuItem { struct MenuItem *NextItem; WORD LeftEdge, TopEdge; WORD Width, Height; UWORD Flags; LONG MutualExclude; APTR ItemFill; APTR SelectFill; BYTE Command; struct MenuItem *SubItem; UWORD NextSelect; }; NextItem Puntatore al prossimo MenuItem della lista delle opzioni. LeftEdge, TopEdge, Width, Height Posizione e grandezza del box di selezione dell'opzione. Flags - CHECKIT indica al sistema che questa opzione è un attributo e che deve visualizzare il checkmark se il flag CHECKED è impostato - CHECKED se CHECKIT è impostato, indica che questa opzione attributo è selezionata - ITEMTEXT se questo flag è impostato, indica che i campi ItemFill e SelectFill contengono puntatori a strutture IntuiText per il rendering dell'opzione; altrimenti contengono puntatori a strutture Image - COMMSEQ se questo flag è settatto, l'opzione contiene una scorciatoia - MENUTOGGLE usato insieme a CHECKIT; se questo flag è impostato l'opzione può essere deselezionata ricliccandola - ITEMENABLED se impostato indica che l'opzione è abilitata alla selezione, altrimenti è disabilitata - HIGHFLAGS i flag descritti qui di seguito, indicano il tipo di illuminazione: - HIGHCOMP si effettua il complemento di tutti i bits del box di selezione - HIGHBOX disegna un rettangolo attorno all'opzione - HIGHIMAGE isualizza un testo o un immagine alternativa (dipende da ITEMTEXT) - HIGHNONE nessuna illuminazione i seguenti flags sono utilizzati solo da intuition: - ISDRAWN Intuition imposta questo flag quando il sotto-menù di questa opzione è visualizzato - HIGHITEM Intuition imposta questo flag quando l'opzione è illuminata. MutualExclude Questo valore indica quale altre opzioni attrributo del menù devono essere mutualmente escluse dalla selezione dell'opzione; ogni bit di questa LONG rappresenta un'opzione; le opzioni mutualmente escludibili sono le prime 32 ItemFill Puntatore ai dati utilizzati per il rendering dell'opzione; nel caso sia settato il flag ITEMTEXT nel campo Flags questo campo punta ad una struttura IntuiText, altrimenti punterà ad una struttura Image; attenzione, più strutture IntuiText (o Image) linkate insieme mediante il campo Next.... verranno visualizzate insieme; questo permette di creare rendering complessi anche utilizzando semplici testi. SelectFill Se il flag HIGHIMAGE è settato nel campo Flags, allora questo campo deve possedere un puntatore a struttura IntuiText o Image per il rendering nella fase di illuminazione; se specificato ITEMTEXT nel campo Flags, questo campo deve puntatore ad una struttura IntuiText, altrimenti deve puntare ad una struttura Image. Command Questo è un valore char che contiene il codice ASCII del tasto di scorciatoia; tale valore sarà valido se specificato COMMSEQ nel campo Flags; il tasto verrà visualizzato insieme all'immagine del tasto Amiga sulla destra dell'opzione. SubItem Puntatore alla struttura MenuItem della prima opzione del sottomenù; non utilizzare questo campo nel caso l'opzione faccia già parte di un sotto-menù, in tal caso infatti il sistema ignorerà tale campo. NextSelect Questo campo è scritto da Intuition per indicare all'applicazione quali sono gli altri elementi selezionati dall'utente in caso di multi-selezione.